package com.warm.base.jdk.thread.base;

/**
 * 隋唐演义大戏舞台
 */
public class Stage extends Thread {

    @Override
    public void run() {

        System.out.println("欢迎观看隋唐演义");
        //让观众安静片刻 等待大戏上演

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("大幕徐徐拉开");

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("话说隋朝末年，隋军与农民起义军杀得昏天黑地......");


        ArmyRunnable armyTaskOfSuiDynasty = new ArmyRunnable();
        ArmyRunnable armyTaskOfRevolt = new ArmyRunnable();

        //使用Runnable接口创建线程
        Thread armyOfSuiDynasty = new Thread(armyTaskOfSuiDynasty, "隋军");
        Thread armyOfRevolt = new Thread(armyTaskOfRevolt, "农民起义军");

        //启动线程，让军队开始作战
        armyOfSuiDynasty.start();
        armyOfRevolt.start();

        //舞台线程休眠  大家专心观看军队厮杀
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("正当双方激战，半路杀出个程咬金！！");

        Thread mrCheng = new KeyPersonThread();
        mrCheng.setName("程咬金");

        System.out.println("程咬金的理想就是结束战争，使百姓安居乐业！！");

        //军队停止作战  正确停止线程的方式
        armyTaskOfSuiDynasty.keepRuuning = false;
        armyTaskOfRevolt.keepRuuning = false;

        //不正确的停止线程的方式  会使线程戛然而止
//        armyOfSuiDynasty.stop();
//        armyOfRevolt.stop();


        //当前线程停止3秒  让军队 和农民线程停止运行
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //历史大戏留给关键先生
        mrCheng.start();

        try {
            //join方法的作用就是使其他线程等待调用join方法的线程结束，然后其他线程再执行
            mrCheng.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("战争结束，人民安居乐业，程先生实现了积极的人生梦想，为人民做出了重大贡献");

        System.out.println("谢谢观看隋唐演义，再见！");


    }

    public static void main(String[] args) {
        new Stage().start();
    }
}
